#pragma once
#include "DAEFloat3.h"

class GMFLight
{
public:
	/**
	* Creates a new GMFLight object.
	*/
	GMFLight(void);
	/* 
	* Destroys the GMFLight object.
	*/
	virtual ~GMFLight(void);

	/**
	* Sets the position of this GMFLight.
	* @param position the position of the light.
	*/ 
	void SetPosition(DAEFloat3 position){
		m_Position = position;
	}

	/**
	* Gets the position of this GMFLight.
	* @return the position of the light.
	*/ 
	DAEFloat3 GetPosition(){return m_Position;}

	/**
	* Sets the rotation of this GMFLight.
	* @param rotation the rotation of the light.
	*/
	void SetRotation(DAEFloat3 rotation){
		m_Rotation = rotation;
	}

	/**
	* Gets the rotation of this GMFLight.
	* @return the rotation.
	*/
	DAEFloat3 GetRotation(){return m_Rotation;}
	
	/**
	* Sets the range of the light.
	* @param range the range of the light.
	*/
	void SetRange(float range){
		m_Range = range;
	}

	/**
	* Gets the range of the light.
	* @return the range of the light.
	*/
	float GetRange(){
		return m_Range;
	}

	/**
	* Sets the color of the light.
	* @param color the color of the light.
	*/
	void SetColor(DAEFloat3 color){
		m_Color = color;
	}

	/**
	* Gets the color of the light.
	* @return the color of the light.
	*/
	DAEFloat3 GetColor(){
		return m_Color;
	}

	/**
	* Sets the inverse square fall off of the light.
	* @param invSquareFallOff the inverse square fallof.
	*/
	void SetInvSquareFallOff(float invSquareFallOff){
		m_InvSquareFallOff = invSquareFallOff;
	}

	/**
	* Gets the inverse square fall off.*
	* @return the inverse square fall off.
	*/
	float GetInvSquareFallOff(){
		return m_InvSquareFallOff;
	}

	/**
	* Sets the intensity of the light.
	* @param intesity the itensity of the light.
	*/
	void SetIntensity(float intensity){
		m_Intensity = intensity;
	}

	/**
	* Returns the intensity of the light.
	* @return the intensity of the light.
	*/
	float GetIntensity(){
		return m_Intensity;
	}
private:
	DAEFloat3 m_Position;
	DAEFloat3 m_Rotation;
	float m_Range;
	DAEFloat3 m_Color;
	float m_InvSquareFallOff;
	float m_Intensity;

	// -------------------------
	// Disabling default copy constructor and default assignment operator.
	// If you get a linker error from one of these functions, your class is internally trying to use them. This is
	// an error in your class, these declarations are deliberately made without implementation because they should never be used.
	// -------------------------
	GMFLight(const GMFLight& t);
	GMFLight& operator=(const GMFLight& t);
};

